#ifndef __DIRECTORY__
#define __DIRECTORY__

#include <sys/types.h>

// output 都是用来存放输出内容的，如果有报错使用strerror
// 示例代码在 directory.c 测试代码在 test.c

/// summary:
/// 不实际切换目录，如果目录存在则将其拼接到当前目录下，如果不存在则给出错误信息
/// param:
///   path: 要切换到的目录
///   cwd: 目前的目录
///   output:
///   将改变后的目录保存在output中，如果出现错误，则将错误信息保存在output中
/// return: 将chdir的返回值返回即可
int cd(const char *path, const char *cwd, char *output);

/// summary: 参考之前到作业，只需将之前的输出改成保存在output中，
///          如果出现错误，将错误信息保存在output中
/// param:
///   name: 要列出的目录名
///   output: 用于保存结果
/// return: 成功返回0，如果出现错误返回-1
int ls(const char *name, char *output);

/// summary: 使用getcwd(NULL, 0)
/// param:
///   output: 用于保存结果, 如果出现错误，保存错误信息
/// return: 成功返回0，错误返回-1
int pwd(char *output);

/// summary: 创建目录，使用mkdir
/// param:
///   pathname: 要创建的目录名
///   mode: mode
///   output: 如果出现错误，将错误信息保存在output中
/// return: 成功返回0，失败返回-1，可将mkdir的返回结果返回
int create_directory(const char *pathname, mode_t mode, char *output);

/// summary: 删除一个空目录，使用rmdir
/// param:
///   pathname: 要删除的目录名
///   output:
///   如果出现错误，保存错误信息，如删除的目录非空(使用rmdir删除一个非空目录时会报错，将这个错误信息保存即可)
/// return: 将rmdir的返回值返回，成功为0，失败为-1
int remove_directory(const char *pathname, char *output);

/// summary: 删除一个文件，使用unlink
/// param:
///   pathname: 要删除的文件名
///   output: 如果出现错误，保存错误信息，将unlink的错误信息保存即可
/// return: 将unlink的返回值返回，成功返回0，失败返回-1
int remove_file(const char *pathname, char *output);

#endif // !__DIRECTORY__
